home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -in_the_mag- / emulation / amiga / uae-0.7.0b2 / src / od-pos / sound.h < prev   
C/C++ Source or Header  |  1998-01-20  |  3KB  |  107 lines

  1.  /* 
  2.   * UAE - The Un*x Amiga Emulator
  3.   * 
  4.   * Support for Amiga audio.device sound
  5.   * 
  6.   * Copyright 1996, 1997 Samuel Devulder
  7.   */
  8.  
  9. struct pOS_Locale;
  10. struct pOS_Library;
  11. struct pOS_ExecBase;
  12. struct pOS_DosBase;
  13. struct pOS_Method;
  14. struct pOS_Resource;
  15. struct pOS_RawDoFmtData;
  16. struct pOS_AsciiDoFmtData;
  17. struct pOS_AsciiFmtData;
  18. struct pOS_ClassGrp;
  19. struct pOS_DosDevPathInfo;
  20. struct pOS_ShellScript;
  21. struct pOS_SegmentInfo;
  22. struct IClass;
  23. struct Isrvstr;
  24. struct TagItem;
  25. struct MemHeader;
  26. struct SemaphoreMessage;
  27. struct StackSwapStruct;
  28. struct Interrupt;
  29. struct StandardPacket;
  30. struct InfoData;
  31. struct WBStartup;
  32.  
  33. #define _SIZE_T /* to avoid interference with <sys/types.h> */
  34. #include <pExec/Types.h>
  35. #include <pDOS/ArgTags.h>
  36. #include <pDOS/DosSig.h>
  37. #include <pDOS/DosErrors.h>
  38. #include <pAudio/Audio.h>
  39. #include <pAudio/AudioTags.h>
  40. #include <pAudio/InfoData.h>
  41. #include <pAudio/StdAMap.h>
  42. #include <pAudio/AudioLib.h>
  43.  
  44. #include <pInline/pExec2.h>
  45.  
  46. extern struct pOS_ExecBase        *gb_ExecBase;
  47. extern struct pOS_ExecLibFunction *gb_ExecLib;
  48. extern struct pOS_DosBase         *gb_DosBase;
  49.  
  50. extern struct pOS_AudioIO     *AudioIO;
  51. extern struct pOS_Std8AudioMap AudioMap;
  52.  
  53. extern unsigned char *buffers[2];
  54. extern uae_u16 *sndbuffer, *sndbufpt;
  55. extern int bufidx, devopen;
  56. extern int sndbufsize;
  57.  
  58. extern int have_sound;
  59.  
  60. extern FILE *AUDIO_FILE;
  61.  
  62. static __inline__ void flush_sound_buffer(void)
  63. {
  64.     if(AUDIO_FILE) {
  65.     fwrite(buffers[bufidx], sndbufsize, 1, AUDIO_FILE);
  66.     } else {
  67.         static char IOSent = 0;
  68.  
  69.     AudioMap.bam_Sample                   = (SBYTE *)buffers[bufidx];
  70.  
  71.     AudioIO->aio_Command                  = CMD_WRITE;
  72.     AudioIO->aio_Flags                    = IOREQF_Quick;
  73.     AudioIO->aio_U.aio_Map.amio_Volume    = 0xFFFF; 
  74.     AudioIO->aio_U.aio_Map.amio_Cycles    = 1;
  75.     AudioIO->aio_U.aio_Map.amio_Frequency = currprefs.sound_freq;  
  76.     AudioIO->aio_U.aio_Map.amio_Length    = sndbufsize;
  77.  
  78.         if(IOSent) pOS_WaitIO((void*)AudioIO); else IOSent=1;
  79.     pOS_BeginIO((void*)AudioIO);
  80.  
  81.         /* double buffering */
  82.         bufidx = 1 - bufidx;
  83.         sndbuffer = sndbufpt = (uae_u16*)buffers[bufidx];
  84.     }
  85. }
  86.  
  87. static __inline__ void check_sound_buffers (void)
  88. {
  89.     if ((char *)sndbufpt - (char *)sndbuffer >= sndbufsize) {
  90.         flush_sound_buffer();
  91.     }
  92. }
  93.  
  94. #define PUT_SOUND_BYTE(b) do { *(uae_u8 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 1); } while (0)
  95. #define PUT_SOUND_WORD(b) do { *(uae_u16 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 2); } while (0)
  96. #define SOUND16_BASE_VAL 0
  97. #define SOUND8_BASE_VAL 0
  98.  
  99. #define DEFAULT_SOUND_MAXB 8192
  100. #define DEFAULT_SOUND_MINB 8192
  101. #define DEFAULT_SOUND_BITS 8
  102. #define DEFAULT_SOUND_FREQ 11025
  103.  
  104. #define UNSUPPORTED_OPTION_b
  105.  
  106. #undef DONT_WANT_SOUND
  107.